﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Telerik.WinControls;
using Telerik.WinControls.UI;

namespace UnigenReport.Form
{
    public partial class ucUnit : UserControl
    {
        private UnigenDataContext db;
        private bool action;// true: add, false: edit

        #region Thiết lập

        public ucUnit()
        {
            InitializeComponent();
            //Phân quyền
            if (Variables.UserRoleID == 0)
            {
                btnDelete.Visibility = ElementVisibility.Collapsed;
                btnSave.Enabled = false;
            }
            SetEvent();
            Common.SetMenuShortcut(btnInsert, btnUpdate, btnDelete, btnGetData, btnCloseForm);

            action = true;
        }

        /// <summary>
        /// Khai báo các sự kiện
        /// </summary>
        private void SetEvent()
        {
            Load += OnLoad;
            this.btnInsert.Click += new System.EventHandler(this.btnInsert_Click);
            this.btnUpdate.Click += new System.EventHandler(this.btnUpdate_Click);
            this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
            this.btnGetData.Click += new System.EventHandler(this.btnGetData_Click);
            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
            this.btnCloseForm.Click += new System.EventHandler(this.btnCloseForm_Click);
            this.grvUnit.CellDoubleClick += new Telerik.WinControls.UI.GridViewCellEventHandler(this.grvUnit_CellDoubleClick);        
        }

        /// <summary>
        /// Hàm load form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnLoad(object sender, EventArgs e)
        {
            //Load default
            SetDefault();
        }

        /// <summary>
        /// Thiết lập các giá trị mặc định của form
        /// </summary>
        private void SetDefault()
        {
            //Bind dữ liệu chính
            BindData();
        }

        /// <summary>
        /// Lấy dữ liệu chính
        /// </summary>
        private void BindData()
        {
            //Data bind
            db = new UnigenDataContext();
            sourceUnit.DataSource = db.Units.OrderBy(p=>p.UnitName).ToList();

            //STT
            Common.SetNo(grvUnit);
        }

        #endregion

        #region Hàm

        private void Insert()
        {
            try
            {
                action = true;
                lblUnit.Text = "Thêm mới đơn vị";
                txtUnitName.Text = String.Empty;
            }
            catch (Exception ex)
            {
                Common.ShowErrorMess("Insert - " + ex.Message);
            }
        }

        private void Update()
        {
            try
            {
                if (sourceUnit.Current == null)
                {
                    Common.ShowSelectionRequire();
                    return;
                }

                action = false;
                lblUnit.Text = "Cập nhật đơn vị";
                txtUnitName.Text = (sourceUnit.Current as Unit).UnitName;
            }
            catch (Exception ex)
            {
                Common.ShowErrorMess("Update - " + ex.Message);
            }
        }

        private void Delete()
        {
            try
            {
                if(Common.ShowQuestion("Xóa đơn vị này?") != DialogResult.OK)
                    return;

                if (sourceUnit.Current == null)
                {
                    Common.ShowSelectionRequire();
                    return;
                }

                db = new UnigenDataContext();
                var inputUnit = (sourceUnit.Current as Unit);
                var deleteUnit = db.Units.SingleOrDefault(p => p.UnitID == inputUnit.UnitID);
                //Xóa
                db.Units.DeleteOnSubmit(deleteUnit);
                db.SubmitChanges();

                //Remove khỏi grid
                sourceUnit.Remove(inputUnit);
                Common.SetNo(grvUnit);

                //Thông báo
                Common.ShowSaveSuccess();

                //Khởi tạo thêm mới
                Insert();  
            }
            catch (Exception ex)
            {
                Common.ShowErrorMess("Delete - " + ex.Message);
            }
        }

        private void Save()
        {
            if (String.IsNullOrEmpty(txtUnitName.Text.Trim()))
            {
                Common.ShowNoticeMess("Nhập tên đơn vị!");
                return;
            }

            db = new UnigenDataContext();
            var unit = new Unit();
            if (action)
            {
                unit.UnitName = txtUnitName.Text.Trim();
                db.Units.InsertOnSubmit(unit);
            }
            else
            {
                unit = db.Units.SingleOrDefault(p => p.UnitID == (sourceUnit.Current as Unit).UnitID);
                unit.UnitName = txtUnitName.Text.Trim();
            }
            //Save
            db.SubmitChanges();

            //Load lại
            BindData();
            txtUnitName.Text = String.Empty;

            //Thông báo
            Common.ShowSaveSuccess();

            //Khởi tạo thêm mới
            Insert();            
        }

        #endregion

        #region Sự kiện
        
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Enter && btnSave.Enabled == true && !btnSave.Focused)
            {
                Save();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void btnInsert_Click(object sender, EventArgs e)
        {
            Insert();
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            Update();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            Delete();
        }

        private void btnGetData_Click(object sender, EventArgs e)
        {
            BindData();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void btnCloseForm_Click(object sender, EventArgs e)
        {
            (this.Parent as Telerik.WinControls.UI.RadPageViewPage).Dispose();
        }


        private void grvUnit_CellDoubleClick(object sender, GridViewCellEventArgs e)
        {
            Update();
        }

        #endregion
    }
}
